package ar.edu.utn.frba.gdaia.src.junittest.ConceptoInstruccionCantidad;

import junit.framework.TestCase;


	
	import java.util.ArrayList;
	import java.util.Date;
	import java.util.HashSet;
	import java.util.Set;

	import junit.framework.Test;
	import junit.framework.TestSuite;
import ar.edu.utn.frba.gdaia.src.domain.Canal;
	import ar.edu.utn.frba.gdaia.src.domain.ConceptoElemental;
	import ar.edu.utn.frba.gdaia.src.domain.Regla;
	import ar.edu.utn.frba.gdaia.src.domain.Situacion;
import ar.edu.utn.frba.gdaia.src.junittest.AbstraerConceptos.LearnRuleCommandTest;
	import ar.edu.utn.frba.gdaia.src.main.GDAIA;
	import ar.edu.utn.frba.gdaia.src.test.TestSetup;
import ar.edu.utn.frba.gdaia.src.util.ListBuilder;


	/**
	 * @author Javier
	 * 19/3/07
	 *
	 */
	public class TestConceptoInstCantidad extends TestCase {

		public static Test suite() {
			TestSetup.main(null);
			System.out.println("Iniciando Suite de Test: Lista Corta");
			TestSuite suite = new TestSuite();
			// $JUnit-BEGIN$

			GDAIA gdaia = new GDAIA();
			gdaia.setCerebro(gdaia.generateCerebroFromXML());

			
			// Preparamos las variables assert a comparar
			ConceptoElemental aC101 = new ConceptoElemental(101, "101", Canal.TECLADO);
			ConceptoElemental aC111 = new ConceptoElemental(111, "111", Canal.TECLADO);
			ConceptoElemental aC105 = new ConceptoElemental(105, "105", Canal.TECLADO);
			ConceptoElemental aC104 = new ConceptoElemental(104, "104", Canal.TECLADO);			
			
//			//concepto abstraido: [3, III, Tres]
//			ArrayList al = new ArrayList();
//			al.add(assertConcepto6);
//			al.add(assertConcepto7);
//			al.add(assertConcepto4);
//			ConceptoElemental assertConcepto8 = new ConceptoElemental(8, al, Canal.TECLADO);
//		
//			//concepto abstraido: [4, Cuatro, IV]
//			ArrayList a2 = new ArrayList();
//			a2.add(assertConcepto10);
//			a2.add(assertConcepto11);
//			a2.add(assertConcepto12);
//			ConceptoElemental assertConcepto9 = new ConceptoElemental(8, a2, Canal.TECLADO);
			
			// [101, 111]
			Situacion assertSIni1 = new Situacion(new ListBuilder().add(aC101).add(aC111).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [111, 111, 111]
			Situacion assertSFin1 = new Situacion(new ListBuilder().add(aC111).add(aC111).add(aC111).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [101, 104]
			Situacion assertSIni2 = new Situacion(new ListBuilder().add(aC101).add(aC104).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [104, 104, 104]
			Situacion assertSFin2 = new Situacion(new ListBuilder().add(aC104).add(aC104).add(aC104).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [101, 105]
			Situacion assertSIni3 = new Situacion(new ListBuilder().add(aC101).add(aC105).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [105, 105, 105]
			Situacion assertSFin3 = new Situacion(new ListBuilder().add(aC105).add(aC105).add(aC105).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [101, 105]
			Situacion assertSIni4 = new Situacion(new ListBuilder().add(aC101).add(aC105).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [104, 105, 105]
			Situacion assertSFin4 = new Situacion(new ListBuilder().add(aC104).add(aC105).add(aC105).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [101, 105]
			Situacion assertSIni5 = new Situacion(new ListBuilder().add(aC101).add(aC104).get(), Canal.INT_MAKE_PRESENT_SIT);
			// [105, 105, 105]
			Situacion assertSFin5 = new Situacion(new ListBuilder().add(aC105).add(aC105).add(aC105).get(), Canal.INT_MAKE_PRESENT_SIT);
//			// situacion abstraida: [[3, III, Tres], P]]
//			Situacion assertSituacion7 = new Situacion(new ListBuilder().add(assertConcepto8).add(assertConcepto5).get(), Canal.INT_ABSTRAER_CONCEPTOS);
//			//situacion abstraida: [[4, Cuatro, IV], P]]
//			Situacion assertSituacion8 = new Situacion(new ListBuilder().add(assertConcepto9).add(assertConcepto5).get(), Canal.INT_ABSTRAER_CONCEPTOS);
//			// [4, P]
//			Situacion assertSituacion9 = new Situacion(new ListBuilder().add(assertConcepto10).add(assertConcepto5).get(), Canal.INT_MAKE_PRESENT_SIT);
//			// [Cuatro, P]
//			Situacion assertSituacion10 = new Situacion(new ListBuilder().add(assertConcepto11).add(assertConcepto5).get(), Canal.INT_MAKE_PRESENT_SIT);
//			// [IV, P]
//			Situacion assertSituacion11 = new Situacion(new ListBuilder().add(assertConcepto12).add(assertConcepto5).get(), Canal.INT_MAKE_PRESENT_SIT);
//			// [P, P, P, P]
//			Situacion assertSituacion12 = new Situacion(new ListBuilder().add(assertConcepto5).add(assertConcepto5).add(assertConcepto5).add(assertConcepto5).get(), Canal.INT_MAKE_PRESENT_SIT);
//			// [5, P, menos, una, P]
//			Situacion assertSituacion13 = new Situacion(new ListBuilder().add(assertConcepto13).add(assertConcepto5).add(assertConcepto14).add(assertConcepto15).add(assertConcepto5).get(), Canal.INT_MAKE_PRESENT_SIT);
			
			//assert de reglas para la lista corta
			// [101,111] -> [111, 111, 111]
			Regla assertRegla1 = new Regla(-1, null, new Date(),assertSIni1, null, assertSFin1, Canal.INT_LERN_RULE);
			// [101,104] -> [104, 104, 104]
			Regla assertRegla2 = new Regla(-1, null, new Date(),assertSIni2, null, assertSFin2, Canal.INT_LERN_RULE);
			// [101,105] -> [105, 105, 105]
			Regla assertRegla3 = new Regla(-1, null, new Date(),assertSIni3, null, assertSFin3, Canal.INT_LERN_RULE);
			// [101,105] -> [104, 105, 105]
			Regla assertRegla4 = new Regla(-1, null, new Date(),assertSIni4, null, assertSFin4, Canal.INT_LERN_RULE);
			// [101,104] -> [105, 105, 105]
			Regla assertRegla5 = new Regla(-1, null, new Date(),assertSIni5, null, assertSFin5, Canal.INT_LERN_RULE);
			// [III, P] -> [P, P, P]
//			Regla assertRegla4 = new Regla(-1, null, new Date(),assertSituacion6, null, assertSituacion4, Canal.INT_LERN_RULE);
//			// [4, P] -> [P, P, P, P]
//			Regla assertRegla6 = new Regla(-1, null, new Date(),assertSituacion9, null, assertSituacion12, Canal.INT_LERN_RULE);
//			// [Cuatro, P] -> [P, P, P, P]
//			Regla assertRegla7 = new Regla(-1, null, new Date(),assertSituacion10, null, assertSituacion12, Canal.INT_LERN_RULE);
//			// [IV, P] -> [P, P, P, P]
//			Regla assertRegla8 = new Regla(-1, null, new Date(),assertSituacion11, null, assertSituacion12, Canal.INT_LERN_RULE);
//			// [5, P, menos, una, P] -> [P, P, P, P] 
//			Regla assertRegla9 = new Regla(-1, null, new Date(),assertSituacion13, null, assertSituacion12, Canal.INT_LERN_RULE);
//
//			// regla abstraida: [[3, III, Tres], P] -> [P, P, P]
//			Regla assertRegla5 = new Regla(-1, null, new Date(),assertSituacion7, null, assertSituacion4, Canal.INT_LERN_RULE);
//			//[[4, Cuatro, IV], P] -> [P, P, P, P]
//			Regla assertRegla10 = new Regla(-1, null, new Date(),assertSituacion8, null, assertSituacion12, Canal.INT_LERN_RULE);
			
			
			// LearnRule: 1
			LearnRuleCommandTest learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSIni1, assertSFin1, assertRegla1);
			suite.addTest(learnRuleCommandTestNew);
			
			// LearnRule: 2
			learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSIni2, assertSFin2, assertRegla2);
			suite.addTest(learnRuleCommandTestNew);

			// LearnRule: 3
			learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSIni3, assertSFin3, assertRegla3);
			suite.addTest(learnRuleCommandTestNew);
			// LearnRule: 4
			learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSIni4, assertSFin4, assertRegla4);
			suite.addTest(learnRuleCommandTestNew);
			// LearnRule: 5
			learnRuleCommandTestNew = new LearnRuleCommandTest("testExecute", gdaia, assertSIni5, assertSFin5, assertRegla5);
			suite.addTest(learnRuleCommandTestNew);
			
				ArrayList assertsListasCortas = new ArrayList();
			
			//1
			Set assertListaCorta2 = new HashSet();
			assertListaCorta2.add(null);
			//assertsListasCortas.add(assertListaCorta2);
			
			//2
			Set assertListaCorta1 = new HashSet();
			assertListaCorta1.add(assertRegla1);
			assertListaCorta1.add(assertRegla2);
			assertListaCorta1.add(assertRegla3);
			assertsListasCortas.add(assertListaCorta1);
			
			//3
			assertsListasCortas.add(assertListaCorta2);
			
			//4
			assertsListasCortas.add(assertListaCorta2);
			
			//5
			assertsListasCortas.add(assertListaCorta1);
			
			//6
			assertsListasCortas.add(assertListaCorta2);
			
			//7
			assertsListasCortas.add(assertListaCorta2);
			
			//8
			assertsListasCortas.add(assertListaCorta1);
			
			//9
			assertsListasCortas.add(assertListaCorta2);
			
			//10
			assertsListasCortas.add(assertListaCorta2);
			
			//11
			assertsListasCortas.add(assertListaCorta1);
			
			//12
			assertsListasCortas.add(assertListaCorta2);
			
			//13
			assertsListasCortas.add(assertListaCorta2);
			
			//14
			assertsListasCortas.add(assertListaCorta1);
			
			//15
			assertsListasCortas.add(assertListaCorta2);
			
			//16
			assertsListasCortas.add(assertListaCorta2);
			
			//17
			assertsListasCortas.add(assertListaCorta1);
			
			//18
			assertsListasCortas.add(assertListaCorta2);
			
			//19
			assertsListasCortas.add(assertListaCorta2);
			
			//20
			assertsListasCortas.add(assertListaCorta1);
			
			//21
			assertsListasCortas.add(assertListaCorta2);
			
			//22
			assertsListasCortas.add(assertListaCorta2);

			//23
			assertsListasCortas.add(assertListaCorta1);
			
			//24
			assertsListasCortas.add(assertListaCorta2);
			
			//25
			assertsListasCortas.add(assertListaCorta2);
			
			//26
			assertsListasCortas.add(assertListaCorta2);
			
			//27
			assertsListasCortas.add(assertListaCorta2);
					
			ArrayList assertsConceptos = new ArrayList();
//			assertsConceptos.add(assertConcepto8);
//			assertsConceptos.add(assertConcepto9);
//			
//			ArrayList assertsReglas = new ArrayList();
//			assertsReglas.add(assertRegla5);
//			assertsReglas.add(assertRegla10);
					
			ConceptoInstCantidadCommandTest hacerListaCommandTestDormido = new ConceptoInstCantidadCommandTest("testExecute", gdaia, assertsListasCortas, assertsConceptos,null);
			suite.addTest(hacerListaCommandTestDormido);
		
			gdaia.generateXMLForCerebro(gdaia.getCerebro());
			System.out.println("Fin Nuevo Suite de Test");

			// $JUnit-END$
			return suite;
		}
	}


